# 第一阶段：前端打包构建（Node 20 + Alpine 3.19）
FROM node:20-alpine3.19 AS frontend-builder
WORKDIR /build-app

# 1. 安装 Alpine 兼容库 + 修复 PATH（确保 node 命令路径正确）
RUN apk add --no-cache gcompat \
    && echo "export PATH=/build-app/node_modules/.bin:\$PATH" >> /root/.bashrc

# 2. 先复制依赖配置文件（利用 Docker 缓存层）
COPY package.json package-lock.json ./

# 3. 安装依赖（强制安装 vite，确保依赖完整）
RUN npm config set registry https://registry.npmmirror.com \
    && npm install --force \
    # 兜底：手动安装 vite（防止依赖安装遗漏）
    && npm install vite --save-dev

# 4. 复制所有源码
COPY . .

# 5. 生产打包（直接调用 node 执行 vite 核心文件，绕开 .bin 脚本）
RUN rm -rf node_modules/.vite dist \
    && node node_modules/vite/bin/vite.js build --mode production

# 第二阶段：Nginx 运行

FROM nginx:1.29.1-alpine3.22-otel
EXPOSE 80
WORKDIR /app

# 替换 Nginx 配置
COPY nginx.conf /etc/nginx/conf.d/default.conf

# 清理并复制前端产物（修复权限 + 保留目录结构）
RUN rm -rf /usr/share/nginx/html/* \
    && mkdir -p /usr/share/nginx/html \
    && chmod -R 755 /usr/share/nginx/html

COPY --from=frontend-builder /build-app/dist /usr/share/nginx/html

# 修复 Nginx 权限
RUN chown -R nginx:nginx /usr/share/nginx/html \
    && chmod -R 755 /etc/nginx/conf.d

# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]